import java.util.Scanner;
import java.util.Arrays;
import java.util.*;
/*给你一个 无重叠的 ，按照区间起始端点排序的区间列表 intervals，
其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束，
并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。
在 intervals 中插入区间 newInterval，使得 intervals 依然按照 starti 升序排列，
且区间之间不重叠（如果有必要的话，可以合并区间）。
返回插入之后的 intervals。
注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。
输入：intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
输出：[[1,2],[3,10],[12,16]]
*/
public class Main {
    public static int[][] addnewInterval(int[][] intervals, int[] newInterval) {
        int n = intervals.length;
        List<int[]> l = new ArrayList<>();
        int[][] newinterval = Arrays.copyOf(intervals, n + 1);
        newinterval[newinterval.length - 1] = newInterval;
        Arrays.sort(newinterval, Comparator.comparingInt(a -> a[0]));
        for (int[] t : newinterval) {
            int m = l.size();
            if (m > 0 && t[0] <= l.get(m - 1)[1]) {
                l.get(m - 1)[1] = Math.max(l.get(m - 1)[1], t[1]);
            } else {
                l.add(t);
            }
        }
        return l.toArray(new int[l.size()][]);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] intervals = new int[n][2];
        for (int i = 0; i < n; i++) {
            intervals[i][0] = sc.nextInt();
            intervals[i][1] = sc.nextInt();
        }
        int[] newInterval = new int[2];
        newInterval[0] = sc.nextInt();
        newInterval[1] = sc.nextInt();
        int[][] result = addnewInterval(intervals, newInterval);
        System.out.println(Arrays.deepToString(result));
    }
}